﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace AstoriaDemo {
    public class MusicService : IMusicService {

        #region IMusicService Members
        EF4Models.Artist IMusicService.getAnArtist(int ArtistID) {
            using (var context = new EF4Models.ChinookEntities()) {
                return context.Artists.Include("Albums").Where(p => p.ArtistId == ArtistID).FirstOrDefault();
            }
        }

        void IMusicService.EditArtistName(int ArtistID, string newName) {
            using (var context = new EF4Models.ChinookEntities()) {
                var artist = context.Artists.Where(p => p.ArtistId == ArtistID).FirstOrDefault();
                if (artist != null) {
                    artist.Name = newName;
                    context.SaveChanges();
                }

            }
        }

        void IMusicService.UpdateArtist(EF4Models.Artist artist) {
            using (var context = new EF4Models.ChinookEntities()) {
                context.Artists.Attach(artist);
                context.ObjectStateManager.ChangeObjectState(artist, System.Data.EntityState.Modified);
                context.SaveChanges();
            }
        }
        /// <summary>
        /// Cách này thì mất thời gian và không linh hoạt, mỗi lần câu lệnh query thay đổi, thì lại 
        /// tạo mới một DataContract. Ví dụ ở đây là GenreGroup phải khai báo [DataContract], [MemberContract] phía
        /// WCF Service, rồi phải update để cập nhật lại Proxy ở phía client
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        GenreGroup[] IMusicService.runSQLQuery(string query) {
            using (var context = new EF4Models.ChinookEntities()) {
                return context.ExecuteStoreQuery<GenreGroup>(query).ToArray();
            }
        }
        /// <summary>
        /// Nếu dynamic trả về thì không được, compile ok nhưng runtime báo lỗi
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        dynamic IMusicService.runDynamicSQLQuery(string query) {
            using (var context = new EF4Models.ChinookEntities()) {
                return context.ExecuteStoreQuery<dynamic>(query);
            }
        }

        #endregion
    }
}
